/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fait.ferm.persists;

import fait.ferm.global.Glob;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author alex
 */
public class Cow  extends PersistsObject {
	
	public double percent_wear; //состояние здоровья
	public Cow_group cow_group;
	
	/**
	 * Создается  пустой объект, которого нет в БД
	 * 
	 */
	public Cow(){
		super();
		table = "cow";
		percent_wear=0.0;
		cow_group = null;  //Global.emptyDirItem;
	}
	/**Создается объект из БД по id. Данные загружаются из БД
	 * @param pid id фермы
	 * @throws Exception
	 */
	public Cow(int pid) throws Exception {
		super(pid);
		table = "cow";
		load();
	}

	/**
	 * Загружает параметры объекта из БД, если id > 0
	 * @throws Exception
	 */
	@Override
	public void load() throws Exception {
		boolean notSuccessfully=true;
		if(id==-1) {
			throw new Exception("Объект "+table+" отсутствует в базе");
		}	
		try (Statement st = con.createStatement()) {
			String q = "SELECT percent_wear, cow_group_id FROM "+table+" WHERE id = " + id;
			ResultSet rs = st.executeQuery(q);
			if(rs.next()){
				notSuccessfully=false;
				percent_wear = rs.getDouble("percent_wear");
				cow_group = new Cow_group(rs.getInt("cow_group_id"));
			}
			rs.close();
		}
		if(notSuccessfully) {
			throw new Exception("Объект "+table+" не загружен");
        }
	}

	/**
	 * Обновляет параметры объекта в БД
	 * @throws SQLException
	 */
	@Override
	protected void update() throws SQLException {
		try (Statement st = con.createStatement()) {
			String q = "UPDATE "+table+" SET ferm_id="+Glob.getFerm()+
					", cow_group_id="+cow_group.getId()+
					", percent_wear = "+ String.format("%.2f",percent_wear) + " " +
					"WHERE id="+id;
			st.executeUpdate(q);
		}
	}

	/**
	 * Создает новую запись в БД с параметрами объекта. 
	 * При этом генерируется новый id объекта
	 * @throws SQLException
	 */
	@Override
	protected void createNew() throws SQLException,Exception {
		if(cow_group==null) {
			throw new Exception("Группа "+table+" не установлена");
		}
		try (Statement st = con.createStatement()) {
			String q = "INSERT INTO "+table+" "+
					"( ferm_id, cow_group_id, percent_wear) VALUES("+
						Glob.getFerm() + ","+
						cow_group.getId()+","+
						String.format("%.2f",percent_wear) +
					")";
			st.executeUpdate(q);
			q="SELECT seq FROM sqlite_sequence WHERE name = '"+table+"'";
			ResultSet rs = st.executeQuery(q);
			if(rs.next()){
				id = rs.getInt("seq");
			}
			rs.close();
		}
	}
	
	@Override
	public String toString(){
		return cow_group.date_purchase.toString()+" "+ cow_group.cow_type.getName() +" "+ String.valueOf(id);
	}	
}
